#ifndef __CLIENTCONNECTION_H__
#define __CLIENTCONNECTION_H__

// Qt Includes
#include <QAbstractSocket>
#include <QObject>

// Qt Declarations
class CTcpSocket;
class QThread;

// Local Declarations
class CClientNetEngine;

// ******************************************************************
// CClientConnection
// ******************************************************************
class CClientConnection : public QObject
{
	Q_OBJECT

public:
/////////////////////////////////////////////////////////////////////
// Construction & Destruction
/////////////////////////////////////////////////////////////////////
	CClientConnection(QObject *pParent);
	~CClientConnection();
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
// Member Functions
/////////////////////////////////////////////////////////////////////
	CClientNetEngine* GetClientNetEngine() { return m_pClientNetEngine; }
/////////////////////////////////////////////////////////////////////

signals:
	void connected();
	void connectFailed(quint32 nError, const QString &strError);

public slots:
/////////////////////////////////////////////////////////////////////
// Public Slots
/////////////////////////////////////////////////////////////////////
	bool connectToHost(const QString &strHostAddress,
			quint16 nPort);
	void connectToServer(const QString &strUserName,
			const QString &strPasswordHash);
/////////////////////////////////////////////////////////////////////

private slots:
/////////////////////////////////////////////////////////////////////
// Private Slots
/////////////////////////////////////////////////////////////////////
	void onSocketConnected();
	void onSocketError();
/////////////////////////////////////////////////////////////////////

private:
/////////////////////////////////////////////////////////////////////
// Member Functions
/////////////////////////////////////////////////////////////////////
	void stopClientThread();
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
// Member Variables
/////////////////////////////////////////////////////////////////////
	CTcpSocket *m_pSocket;
	CClientNetEngine *m_pClientNetEngine;
	QThread *m_pClientThread;
/////////////////////////////////////////////////////////////////////
};

#endif // CCLIENTCONNECTION_H
